//
// Created by zyl on 2021/5/7.
//
#include "_file.h"
#include "stdio.h"
/**
 * 文件缓冲类型
 * 1. 行缓冲
 * 标准io库函数,往标准输出输出的东西都是行缓冲的
 * 所谓行缓冲就是缓冲区碰到换行符的时候才刷新缓冲区
 * 2. 全缓冲
 *  - 缓冲区满
 *  - 人为刷新缓冲区
 *  - 程序正常结束
 * 写文件的流程
 * 应用程序空间 -> 内核空间 -> 驱动程序 -> 硬盘
 * 缓冲区可以减少进出内核的次数
 */
void open_file() {
    FILE *f = NULL;
    f = fopen("/home/zyl/CLionProjects/c/main.c", "a+");
    if (f == NULL) {
        printf("打开文件失败");
        return;
    }
    //每次读一个字节
    int i = fgetc(f);
    printf("%u, %c\n", i, i);
    //每次读一个字符串
    char buf[1024] = "";
    printf("%s\n", fgets(buf, 1023, f));
    //每次写入一个字节
    if (fputc(';', f) != EOF) {
        printf("写入一个字符成功\n");
    }

    //关闭文件
    if (fclose(f) != 0) {
        printf("文件关闭失败");
    }
}

void read_write(void) {
    FILE *f = NULL;
    f = fopen("/home/zyl/CLionProjects/c/main.c", "a+");
    if (f == NULL) {
        printf("打开文件失败");
    }

    printf("%c\n", fputc(';', f));
    //写入内容后指向最后一个字节 需要将起始位置重置
//    rewind(f);
    fseek(f, 0, SEEK_SET);
    char buf [2048] = "";
    printf("%c\n", fgetc(f));
    int i = fread(buf, 3, 1, f);

    printf("\nfread 返回值%d", i);
    printf("\nbuff : %s", buf);
    fread(buf, 3, 1, f);
    printf("\nbuff : %s", buf);
    if (f != NULL) {
        if (fclose(f) != -1) {
            printf("\n文件关闭成功");
        }
    }
}
